import { ref, reactive } from 'vue';
import { formatDate } from '@/utils/dateUtils';

// 用户数据接口
export interface UserData {
  status: string;
  userName?: string;
  lastPeriodDate?: string;
  periodDuration?: number;
  cycleDuration?: number;
  lastMenstrualPeriod?: string;
  dueDate?: string;
  birthDate?: string;
  babyName?: string;
}

// 默认用户数据
const defaultUserData: UserData = {
  status: 'pregnant', // 默认状态
  userName: '刘小红',
  babyName: '小明'
};

// 用户数据响应式对象
export const userData = reactive<UserData>({...defaultUserData});

/**
 * 获取用户数据
 * @returns 用户数据对象
 */
export const getUserData = (): UserData => {
  try {
    const data = uni.getStorageSync('userData');
    if (data) {
      const parsedData = JSON.parse(data);
      Object.assign(userData, parsedData);
      console.log('获取到用户数据:', parsedData);
    } else {
      // 如果没有存储的数据，使用模拟数据
      const today = new Date();
      
      if (userData.status === 'pregnant') {
        // 孕期模拟数据
        const lmpDate = new Date();
        lmpDate.setDate(today.getDate() - 90); // 假设末次月经是90天前
        userData.lastMenstrualPeriod = formatDate(lmpDate);
      } else if (userData.status === 'postpartum') {
        // 产后模拟数据
        const birthDate = new Date();
        birthDate.setDate(today.getDate() - 90); // 假设宝宝出生于90天前
        userData.birthDate = formatDate(birthDate);
      } else if (userData.status === 'preparing') {
        // 备孕模拟数据
        const lastPeriodDate = new Date();
        lastPeriodDate.setDate(today.getDate() - 14); // 假设上次月经是14天前
        userData.lastPeriodDate = formatDate(lastPeriodDate);
        userData.periodDuration = 5;
        userData.cycleDuration = 28;
      }
      
      console.log('使用模拟数据:', userData);
    }
    return userData;
  } catch (e) {
    console.error('获取用户数据失败', e);
    return userData;
  }
};

/**
 * 保存用户数据
 * @param data 要保存的用户数据
 */
export const saveUserData = (data: Partial<UserData>): void => {
  try {
    // 更新本地响应式对象
    Object.assign(userData, data);
    
    // 保存到本地存储
    uni.setStorageSync('userData', JSON.stringify(userData));
    console.log('保存用户数据成功:', userData);
  } catch (e) {
    console.error('保存用户数据失败', e);
  }
};

/**
 * 更新用户状态
 * @param status 新的用户状态
 */
export const updateUserStatus = (status: string): void => {
  try {
    // 更新状态
    userData.status = status;
    
    // 保存到本地存储
    uni.setStorageSync('userStatus', status);
    uni.setStorageSync('userData', JSON.stringify(userData));
    
    console.log('更新用户状态成功:', status);
  } catch (e) {
    console.error('更新用户状态失败', e);
  }
}; 